package com.hhkj.admin.student.service.base;

import com.hhkj.admin.student.domain.StudentCourse;
import com.hhkj.admin.student.model.dopo.StudentCourseDo;
import com.hhkj.admin.student.model.dopo.StudentCoursePo;
import com.hhkj.admin.student.model.dopo.StudentPo;
import com.hhkj.admin.student.model.req.StudentBatchReq;
import com.hhkj.admin.student.model.req.StudentCourseReq;
import com.hhkj.admin.student.model.req.StudentReq;
import com.ruoyi.common.base.biz.service.base.BaseService;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 学员课程信息关联Service接口
 *
 * @author ruoyi
 * @since 2023-05-17
 */
public interface StudentCourseService extends BaseService<StudentCourse, StudentCourseDo, StudentCoursePo> {

    /**
     * 根据id获取列表
     * @return
     */
    List<StudentCourse> listByIdList(List<Long> idList);

    /**
     * 统计条数
     *
     * @param studentCourse 条件
     * @return 条数
     */
    int countByCondition(StudentCourse studentCourse);

    /**
     * 批量修改过期学员状态
     *
     * @param idList     学员课程主键
     * @param statusCode 状态
     */
    void updateBatchStatusByIdList(List<Long> idList, String statusCode);


    /**
     * 清除被设置为‘未审核’状态的学员的到期日期和题库类型
     *
     * @param idList id集合
     */
    void cleanInfoByIdList(List<Long> idList);

    /**
     * 批量更新学员科目信息
     *
     * @param idList           学员idList
     * @param studentCourseReq 学员信息
     */
    void updateStudentCourseByIdList(List<Long> idList, StudentCourseReq studentCourseReq);

    /**
     * 统计批次下全部学员的缴费总金额
     *
     * @param batchId 批次id
     * @return 缴费总金额
     */
    BigDecimal countBatchStudentPrice(Long batchId);

    /**
     * 查询批次下学员列表
     *
     * @param studentBatchReq 批次号id
     * @return 学员
     */
    List<StudentPo> listBatchStudentPoByDo(StudentBatchReq studentBatchReq);

    /**
     * 查询学员信息列表（包含关联表信息）
     *
     * @param studentReq 学员信息
     * @return 学员信息集合
     */
    List<StudentPo> selectStudentRelevancyList(StudentReq studentReq);

    /**
     * 根据条件查询学员科目
     *
     * @param coursePo 参数
     * @return 学员科目集合
     */
    List<StudentCourse> listStudentCoursePoByDo(StudentCoursePo coursePo);

    /**
     * 解绑微信
     *
     * @param studentBatchReq 传参
     * @return 影响行数
     */
    int cancelBind(StudentBatchReq studentBatchReq);

    /**
     * 根据身份证，批量获取每个学员报名的课程
     *
     * @param idCardList
     * @param idCardList 身份证列表
     * @param statusList 学员状态
     * @return
     */
    List<StudentCourse> listByIdCardList(List<String> idCardList, List<String> statusList);


}
